const axios = require('axios');


// 使用Axios发起请求，并返回数据所在的地址
function getData (url) {
  return new Promise((resolve, reject) => {
    axios.get(url)
      .then(res => {
        // console.log(res.data);
        resolve(res.data);
      })
      .catch((err) => {
        reject(err.data);
      });
  });
}

// 获得指定年份中的数据所在地址
function getUrl (str) {
  const regex = /rank_url.*?(\d+\.txt)/m;
  let m;
  let baseUrl = 'https://www.qschina.cn/sites/default/files/qs-rankings-data/cn/';

  if ((m = regex.exec(str)) !== null) {
    // console.log(baseUrl + m[1]);
    return baseUrl + m[1];
  }
}

// 提取数据

function getRankDataListByYear (year, data) {
  // console.log(year, data);
  let dataList = [];
  for (const key in data) {
    let university = data[key]['title'];
    let score = data[key]['score'];
    let rank = data[key]['rank_display'];
    dataList.push({ year, university, score, rank });
  }
  return dataList;
}


// 测试
let url = 'https://www.qschina.cn/university-rankings/university-subject-rankings/2020/communication-media-studies';
getData(url)
  .then((value) => {
    // console.log(value);
    // 获取到数据所在地址
    return getUrl(value);
  })
  .then((value) => {
    // 使用得到的地址发起排名数据请求
    // console.log(value);
    return getData(value);
  })
  .then((value) => {
    // 提取数据
    // console.log(value);
    // getRankDataListByYear('2010', value['data']);
    console.log(getRankDataListByYear('2010', value['data']));
  });
